/**
 线程死锁是指两个或多个线程相互持有对方所需的资源，且都不释放自己持有的资源，导致所有线程都无法继续执行的状态。
 */
public class Test7 {
    // 创建两个资源
    private static final Object resource1 = new Object();
    private static final Object resource2 = new Object();

    public static void main(String[] args) {
        // 线程1: 先获取resource1，再尝试获取resource2
        new Thread(() -> {
            synchronized (resource1) {
                System.out.println("线程1获取了资源1，尝试获取资源2...");
                try {
                    Thread.sleep(100); // 给线程2获取资源2的时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (resource2) {
                    System.out.println("线程1获取了资源2");
                }
            }
        }, "线程1").start();

        // 线程2: 先获取resource2，再尝试获取resource1
        new Thread(() -> {
            synchronized (resource2) {
                System.out.println("线程2获取了资源2，尝试获取资源1...");
                try {
                    Thread.sleep(100); // 给线程1获取资源1的时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (resource1) {
                    System.out.println("线程2获取了资源1");
                }
            }
        }, "线程2").start();
    }
}
